package wlxldh357;

public class J15_OOP1 {
	// 객체지향 개발 기법
	// OOP : 객체를 기반으로 프로그램을 작성하는 것
	// 언어로 응용 프로그램을 개발하는 경우,문제 해결을 위해 실제 상황과 유사한 모델을 만들어야함

	// 예를 들어, 직원 세금을 계산하는 프로그램 작성
	// 프로그램에서 회사를 표현하는 회사객체가 필요
	// 또한, 직원을 나타내는 직원객체, 세금을 나타내는 세금객체도 필요
	// 회사 , 직원 , 세금 , 객체를 자바 프로그램에서
	// 코드로 나타내는방법에 대해 알아봄

	// 모든 객체에는 2가지 성질이 있음
	// [속성, field property], 객체가 할 수 있는 [행동 method]
	// 가져오는 경우에도 속성과 행위는 있어야함

	// 자바 객체를 만드는 방법은? - 설계도를 이용
	// '차'라는 객체를 잘 만들려면 좋은 차로 만들어 주는 [ 설계로]를 참고
	// OOP에서 객체를 만들어주는 설계도를 [클래스]라 함

	// 클래스는 동일한 유형의 객체를 만드는 청사진/ 설계도 또는 템플릿임(중요!)
	// 붕어빵 - 객체
	// 붕어빵 틀 - 클래스
	// 밀가루, 팥 - 속성
	// 클래스는 당신이 만들려는 객체의 종류를 결정함

	// 요약하자면, 클래스는 프로그래머로 하여금
	// 문제의 추상화를 만들수 있게 해주는 OOP 도구임
	// OOP에서 추상화 abstraction 는 실제 객체를 표현하기
	// 위해 실제 객체에서 핵심적인 개념 또는 기능을 뽑아 프로그래밍 객체로 만드는 행위를 말함
	// 클래스는 자바 프로그램의 기본뼈대
	// 자바 초보자는 클래스를 작성할때
	// 클래스이름 , 필드 , 메서드 드을 고려할 것

	// 클래스 만들기
	// class 클래스 이름{
	// 클래스 몸체(필드, 메서드)

	// 클래스의 이름은 반드시 대문자로 시작
	// 클래스 정의시 클래스 이름과 파일 이름은 동일해야 함
	// 클래스 내에 선언된 변수를 필드 field 라함
	public static void main(String[] args) {
		// 클래스를 사용하지 않고 학생 객체 생성
		String name = "전제복";
		int stdno = 123456789;
		String addr = "강원도 강릉시";
		int mp1 = 1234567890;

		String name2 = "송혜교";
		int stdno2 = 234567890;
		String addr2 = "강원도 주문진읍";
		int mp = 345678901;

		// 클래스를 이용해서 학생 객체 생성
		Student2 jaebok = new Student2();
		// jaebok.name = "제복";
		// jaebok.stdno = 123456789;
		// jaebok.addr = "강원도 강릉시";
		// jaebok.mp = 1234567890;

		// Student2 heejun = new Student2();
		// heejun.name = "희준";
		// heejun.stdno = 234567890;
		// heejun.addr = "강원도 주문진";
		// heejun.mp = 345678901;

	} // main

}// class

// 클래스 정의
class Student2 {
	// 필드 선언
	String name;
	int stdno;
	String addr;
	int mp;

	// 생성자 추가
	public Student2() {
		stdno = 12345;
		name = "아무개";
		addr = "서울";
		mp = 987654;

		// 생성자를 이용한 학생 객체 생성
		Student2 one = new Student2();
		System.out.println(one.name);

		Student2 two = new Student2();
		System.out.println(two.name);
	}

	// 고객(Customer) 클래스
	// 아이디, 비밀번호, 이름, 주소, 전화번호 , 이메일
	class Customer {
		String id;
		String passwd;
		String name;
		String addr;
		String mp;
		String email;

	}

	// 상품 (Product 클래스)
	// 상품번호 , 상품명 , 가격 , 종류 , 제조사

	class Product {
		int bunho;
		int name2;
		int won;
		String jongryu;
		String jejosa;

	}

	// 스타크래프트 2의 테란 유닛(TerranUnit)을 클래스로 정의
	// 클래스로 정의
	// 생명력, 에너지 ,방어력
	// 광물 , 베스핀, 보급품,생산시간

	class TerranUnit {
		int life;
		int energy;
		int shield;
		int mineral;
		int gas;
		int supply;
		int maketime;

	}
}